/** 
 *  Copyright 2010 Matthew Werny & Burk Price.
 * 
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 * 
 *       http://www.apache.org/licenses/LICENSE-2.0
 * 
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 *  under the License.
 */
package net.iceflow.db.migration.maven;

import java.sql.SQLException;
import net.iceflow.db.jdbc.schema.CreateDatabase;
import net.iceflow.db.jdbc.schema.DropDatabase;
import org.apache.commons.lang.StringUtils;
import org.apache.maven.plugin.MojoExecutionException;

/**
 * @goal reset
 */
public class ResetMojo extends AbstractMigrationMojo {

	public void executeMojo() throws MojoExecutionException {
		getLog().info("Resetting database " + getUrl() + ".");

		try {
			getLog().info("Dropping database " + getUrl() + ".");
			String dropSql = StringUtils.isBlank(getDropSql()) ? DropDatabase.DROP_DATABASE_SQL : getDropSql();
			new DropDatabase(getDriver(), getUrl(), getUsername(), getPassword()).execute(dropSql);
		} catch (ClassNotFoundException e) {
			throw new MojoExecutionException("Failed to reset database " + getUrl(), e);
		} catch (SQLException ignored) {
		}

		try {
			getLog().info("Creating database " + getUrl() + ".");
			String createSql = StringUtils.isBlank(getCreateSql()) ? CreateDatabase.CREATE_DATABASE_SQL : getCreateSql();
			new CreateDatabase(getDriver(), getUrl(), getUsername(), getPassword()).execute(createSql);

			getLog().info("Migrating database " + getUrl() + ".");
			createMigrationManager().migrate();
		} catch (Exception e) {
			throw new MojoExecutionException("Failed to reset database " + getUrl(), e);
		}
	}
}
